public class code2 {

    // 牛客 top 101 前序遍历

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return int整型一维数组
     */
    public int[] preorderTraversal (TreeNode root) {
        // write code here
        // 这里我们先定义一个链表用来存储当前的节点元素
        List<Integer> list = new ArrayList<>();

        // 定义一个方法我们来尝试获取树中的信息
        getMessage(root, list);

        // 树中的信息获取结束后回被存储在这个 ArrayList 链表中
        int[] arr = new int[list.size()];
        for(int i = 0; i < list.size(); i++) {
            arr[i] = list.get(i);
        }

        return arr;
    }

    private static void getMessage(TreeNode root, List<Integer> list) {
        // 这里对树中元素的获取是通过递归遍历的形式获取的
        if(root != null) {
            list.add(root.val);
            getMessage(root.left,list);
            getMessage(root.right,list);
        }
    }
}
